home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / wx / py / introspect.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  8KB  |  283 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
  5. __cvsid__ = '$Id: introspect.py 39896 2006-06-29 22:24:00Z RD $'
  6. __revision__ = '$Revision: 39896 $'[11:-2]
  7. import cStringIO
  8. import inspect
  9. import sys
  10. import tokenize
  11. import types
  12. import wx
  13.  
  14. def getAutoCompleteList(command = '', locals = None, includeMagic = 1, includeSingle = 1, includeDouble = 1):
  15.     attributes = []
  16.     root = getRoot(command, terminator = '.')
  17.     
  18.     try:
  19.         if locals is not None:
  20.             object = eval(root, locals)
  21.         else:
  22.             object = eval(root)
  23.     except:
  24.         pass
  25.  
  26.     attributes = getAttributeNames(object, includeMagic, includeSingle, includeDouble)
  27.     return attributes
  28.  
  29.  
  30. def getAttributeNames(object, includeMagic = 1, includeSingle = 1, includeDouble = 1):
  31.     attributes = []
  32.     dict = { }
  33.     str_type = str(type(object))
  34.     for item in attributes:
  35.         dict[item] = None
  36.     
  37.     attributes = dict.keys()
  38.     attributes = _[3]
  39.     attributes.sort((lambda x, y: cmp(x.upper(), y.upper())))
  40.     if not includeDouble:
  41.         attributes = filter((lambda item: item[:2] != '__'), attributes)
  42.     
  43.     return attributes
  44.  
  45.  
  46. def hasattrAlwaysReturnsTrue(object):
  47.     return hasattr(object, 'bogu5_123_aTTri8ute')
  48.  
  49.  
  50. def getAllAttributeNames(object):
  51.     attrdict = { }
  52.     
  53.     try:
  54.         key = type(object).__name__
  55.     except:
  56.         key = 'anonymous'
  57.  
  58.     wakeupcall = dir(object)
  59.     del wakeupcall
  60.     attributes = dir(object)
  61.     attrdict[(key, 'dir', len(attributes))] = attributes
  62.     
  63.     try:
  64.         attributes = object.__dict__.keys()
  65.         attributes.sort()
  66.     except:
  67.         pass
  68.  
  69.     attrdict[(key, '__dict__', len(attributes))] = attributes
  70.     
  71.     try:
  72.         klass = object.__class__
  73.     except:
  74.         pass
  75.  
  76.     if klass is object:
  77.         pass
  78.     else:
  79.         attrdict.update(getAllAttributeNames(klass))
  80.     
  81.     try:
  82.         bases = object.__bases__
  83.     except:
  84.         pass
  85.  
  86.     if isinstance(bases, types.TupleType):
  87.         for base in bases:
  88.             if type(base) is types.TypeType:
  89.                 continue
  90.             attrdict.update(getAllAttributeNames(base))
  91.         
  92.     
  93.     return attrdict
  94.  
  95.  
  96. def getCallTip(command = '', locals = None):
  97.     calltip = ('', '', '')
  98.     root = getRoot(command, terminator = '(')
  99.     
  100.     try:
  101.         if locals is not None:
  102.             object = eval(root, locals)
  103.         else:
  104.             object = eval(root)
  105.     except:
  106.         return calltip
  107.  
  108.     name = ''
  109.     (object, dropSelf) = getBaseObject(object)
  110.     
  111.     try:
  112.         name = object.__name__
  113.     except AttributeError:
  114.         pass
  115.  
  116.     tip1 = ''
  117.     argspec = ''
  118.     if inspect.isbuiltin(object):
  119.         pass
  120.     elif inspect.isfunction(object):
  121.         argspec = apply(inspect.formatargspec, inspect.getargspec(object))
  122.         if dropSelf:
  123.             temp = argspec.split(',')
  124.             if len(temp) == 1:
  125.                 argspec = '()'
  126.             elif temp[0][:2] == '(*':
  127.                 pass
  128.             else:
  129.                 argspec = '(' + ','.join(temp[1:]).lstrip()
  130.         
  131.         tip1 = name + argspec
  132.     
  133.     doc = ''
  134.     if callable(object):
  135.         
  136.         try:
  137.             doc = inspect.getdoc(object)
  138.  
  139.     
  140.     if doc:
  141.         firstline = doc.split('\n')[0].lstrip()
  142.         if tip1 == firstline or firstline[:len(name) + 1] == name + '(':
  143.             tip1 = ''
  144.         else:
  145.             tip1 += '\n\n'
  146.         docpieces = doc.split('\n\n')
  147.         tip2 = docpieces[0]
  148.         tip3 = '\n\n'.join(docpieces[1:])
  149.         tip = '%s%s\n\n%s' % (tip1, tip2, tip3)
  150.     else:
  151.         tip = tip1
  152.     calltip = (name, argspec[1:-1], tip.strip())
  153.     return calltip
  154.  
  155.  
  156. def getRoot(command, terminator = None):
  157.     command = command.split('\n')[-1]
  158.     if command.startswith(sys.ps2):
  159.         command = command[len(sys.ps2):]
  160.     
  161.     command = command.lstrip()
  162.     command = rtrimTerminus(command, terminator)
  163.     tokens = getTokens(command)
  164.     if not tokens:
  165.         return ''
  166.     
  167.     if tokens[-1][0] is tokenize.ENDMARKER:
  168.         del tokens[-1]
  169.     
  170.     if not tokens:
  171.         return ''
  172.     
  173.     if terminator == '.':
  174.         if tokens[-1][1] != '.' or tokens[-1][0] is not tokenize.OP:
  175.             return ''
  176.         elif terminator and command.endswith(terminator):
  177.             size = 0 - len(terminator)
  178.             command = command[:size]
  179.         
  180.     command = command.rstrip()
  181.     tokens = getTokens(command)
  182.     tokens.reverse()
  183.     line = ''
  184.     start = None
  185.     prefix = ''
  186.     laststring = '.'
  187.     emptyTypes = ('[]', '()', '{}')
  188.     for token in tokens:
  189.         tokentype = token[0]
  190.         tokenstring = token[1]
  191.         line = token[4]
  192.         if tokentype is tokenize.ENDMARKER:
  193.             continue
  194.         
  195.         if tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) and laststring != '.':
  196.             if prefix and line[token[3][1]] != ' ':
  197.                 prefix = ''
  198.             
  199.             break
  200.         
  201.         if (tokentype in (tokenize.NAME, tokenize.STRING, tokenize.NUMBER) or tokentype is tokenize.OP) and tokenstring == '.':
  202.             if prefix:
  203.                 prefix = ''
  204.                 break
  205.             else:
  206.                 start = token[2][1]
  207.         elif len(tokenstring) == 1 and tokenstring in '[({])}':
  208.             if prefix in emptyTypes and tokenstring in '[({':
  209.                 break
  210.             else:
  211.                 prefix = tokenstring + prefix
  212.         else:
  213.             break
  214.         laststring = tokenstring
  215.     
  216.     if start is None:
  217.         start = len(line)
  218.     
  219.     root = line[start:]
  220.     if prefix in emptyTypes:
  221.         root = prefix + root
  222.     
  223.     return root
  224.  
  225.  
  226. def getTokens(command):
  227.     if type(command) == unicode:
  228.         
  229.         try:
  230.             command = command.encode(wx.GetDefaultPyEncoding())
  231.         except UnicodeEncodeError:
  232.             pass
  233.         except:
  234.             None<EXCEPTION MATCH>UnicodeEncodeError
  235.         
  236.  
  237.     None<EXCEPTION MATCH>UnicodeEncodeError
  238.     f = cStringIO.StringIO(command)
  239.     tokens = []
  240.     
  241.     try:
  242.         
  243.         def eater(*args):
  244.             tokens.append(args)
  245.  
  246.         tokenize.tokenize_loop(f.readline, eater)
  247.     except tokenize.TokenError:
  248.         pass
  249.  
  250.     return tokens
  251.  
  252.  
  253. def rtrimTerminus(command, terminator = None):
  254.     if terminator:
  255.         pieces = command.split(terminator)
  256.         if len(pieces) > 1:
  257.             command = terminator.join(pieces[:-1]) + terminator
  258.         
  259.     
  260.     return command
  261.  
  262.  
  263. def getBaseObject(object):
  264.     None if inspect.isbuiltin(object) else None<EXCEPTION MATCH>AttributeError
  265.     None if inspect.isclass(object) else None<EXCEPTION MATCH>AttributeError
  266.     dropSelf = 0
  267.     return (object, dropSelf)
  268.  
  269.  
  270. def getConstructor(object):
  271.     
  272.     try:
  273.         return object.__init__.im_func
  274.     except AttributeError:
  275.         for base in object.__bases__:
  276.             constructor = getConstructor(base)
  277.             if constructor is not None:
  278.                 return constructor
  279.                 continue
  280.         
  281.  
  282.  
  283.